package day02;

/**
 * @author Jetwang
 * @version 1.0
 * @since 2023/3/2 20:14
 * 力扣 203
 */
public class LinkedListPractice02 {
    public static ListNode delTargetValue(ListNode head, int target) {
        // 哨兵节点
        ListNode sentinel = new ListNode(-1, head);
        ListNode p1 = sentinel;
        ListNode p2 = sentinel.next;
        while(p2 != null) {
            if (p2.val == target) {
                // 删除
                p1.next = p2.next;
            } else {
                p1 = p1.next;
            }
            p2 = p2.next;
        }
        return sentinel.next;
    }

    public static ListNode delTargetValue02(ListNode head, int target) {
        // 哨兵节点
        ListNode sentinel = new ListNode(-1, head);
        ListNode p1 = sentinel;
        ListNode p2 = null;
        while((p2 = p1.next) != null) {
            if (p2.val == target) {
                // 删除
                p1.next = p2.next;
            } else {
                p1 = p1.next;
            }
        }
        return sentinel.next;
    }

    public static ListNode delTargetValue03(ListNode p, int target) {
        if (p == null) {
            return null;
        }
        if (p.val == target) {
            return delTargetValue03(p.next, target);
        } else {
            p.next = delTargetValue(p.next, target);
            return p;
        }

    }

    public static void main(String[] args) {
        ListNode o5 = new ListNode(5, null);
        ListNode o4 = new ListNode(4, o5);
        ListNode o3 = new ListNode(5, o4);
        ListNode o2 = new ListNode(2, o3);
        ListNode o1 = new ListNode(1, o2);

        // ListNode listNode = delTargetValue(o1, 5);
        // ListNode listNode = delTargetValue02(o1, 5);
        ListNode listNode = delTargetValue03(o1, 5);
        System.out.println(listNode);
    }
}
